package org.jpro.modules.system.service;

import java.util.Date;

import org.jpro.modules.system.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

/**
 * <P>功能描述 : 用户service </P>
 * <P>File name : IUserService </P>
 * <P>Author : 王泽浩 </P>
 * <P>E-Mail : 1028625100@qq.com </P>
 * <P>Date : 2017/3/4 上午12:05</P>
 * @since 1.0
 */
public interface IUserService {

    /**
     * 加密方法
     */
    String HASH_ALGORITHM = "SHA-1";

    /**
     * The constant HASH_INTERATIONS.
     */
    int HASH_INTERATIONS = 1024;

    /**
     * The constant SALT_SIZE.
     */
    int SALT_SIZE = 8;	// 盐长度

    /**
     * <P>功能描述 : 查询用户列表 </P>
     * <P>Method Name : search </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param pageRequest the page request
     * @return the page
     * @since 1.0
     */
    Page<User> search(String name, String phone, Date gtCreateDate, Date ltCreateDate, PageRequest pageRequest);

    /**
     * <P>功能描述 : 保存用户 </P>
     * <P>Method Name : save </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param user the user
     * @since 1.0
     */
    void save(User user);

    /**
     * <P>功能描述 : 修改用户 </P>
     * <P>Method Name : update </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param user the user
     * @since 1.0
     */
    void update(User user);

    /**
     * <P>功能描述 : 删除用户 </P>
     * <P>Method Name : delete </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param id the id
     * @since 1.0
     */
    void delete(Integer id);

    /**
     * <P>功能描述 : 验证原密码是否正确 </P>
     * <P>Method Name : checkPassword </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param user the user
     * @param oldPassword the old password
     * @return the boolean
     * @since 1.0
     */
    boolean checkPassword(User user, String oldPassword);

    /**
     * <P>功能描述 : 更新密码 </P>
     * <P>Method Name : updatePwd </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param user the user
     * @since 1.0
     */
    void updatePwd(User user);

    /**
     * 通过登陆名获取用户
     * @param loginName the login name
     * @return the user
     */
    User getUser(String loginName);

    /**
     * <P>功能描述 : 通过ID获取用户 </P>
     * <P>Method Name : get </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param id the id
     * @return the user
     * @since 1.0
     */
    User get(Integer id);

    /**
     * <P>功能描述 : 修改用户登录 </P>
     * <P>Method Name : updateUserLogin </P>
     * <P>Author : 王泽浩 </P>
     * <P>E-Mail : 1028625100@qq.com </P>
     * <P>Date : 2017-03-15 15:20:29</P>
     * @param user the user
     * @since 1.0
     */
    void updateUserLogin(User user);
}
